package ast

import "strings"

//解析器
type Parser struct{
	tokens []*Token
	pos int
}

func NewParser(tokens []*Token)*Parser{
	return &Parser{
		tokens: tokens,
		pos: 0,
	}
}

func (p *Parser)currentToken()*Token{
	if p.pos<len(p.tokens){
		return p.tokens[p.pos]
	}
	return nil
}

func (p *Parser)next(){
	p.pos++
}

func (p *Parser)parseSelect()*ASTNode{
	selectNode:=&ASTNode{Type:SELECT}
	if !(p.currentToken().Type==KeywordToken&&strings.EqualFold(p.currentToken().Value,string(SELECT))){
		return nil
	}
	p.next()
	for{
		if p.currentToken().Type==IdentifierToken{
			selectNode.Children=append(selectNode.Children, &ASTNode{Type: COLUMN,Value: p.currentToken().Value})
			p.next()
		}else{
			break
		}
	}
	
	return selectNode
}